package response

import (
	"encoding/json"
	"helper-api/utils"
	"strconv"
	"time"
)

// ScriptTreeResponse 服务树返回实体
type ScriptTreeResponse struct {
	Id       int64                `json:"key"`
	ParentId int64                `json:"parentId"`
	Title    string               `json:"title"`
	ItemType int                  `json:"itemType"`
	IsLeaf   bool                 `json:"isLeaf"`
	Children []ScriptTreeResponse `json:"children" gorm:"-"`
}

// ScriptGroupListResponse 服务分组列表
type ScriptGroupListResponse struct {
	Id         int64     `json:"id"`         // 主键
	ItemType   int       `json:"itemType"`   // 类型 1:分组; 2:服务; 3:脚本
	Title      string    `json:"title"`      // 标题
	Desc       string    `json:"desc"`       // 描述
	WorkHome   string    `json:"workHome"`   // 工作目录(分组时添加)
	CreateId   int64     `json:"createId"`   // 创建人ID
	CreateName string    `json:"createName"` // 创建人ID
	CreateTime time.Time `json:"createTime"` // 创建时间
}

func (s ScriptGroupListResponse) MarshalJSON() ([]byte, error) {
	type temp ScriptGroupListResponse
	return json.Marshal(&struct {
		temp
		CreateTime utils.DateTime `json:"createTime"`
	}{
		temp:       (temp)(s),
		CreateTime: utils.DateTime(s.CreateTime),
	})
}

// ScriptItemListResponse 服务Item列表
type ScriptItemListResponse struct {
	Id         int64     `json:"id"`         // 主键
	GroupId    int64     `json:"groupId"`    // 组ID
	GroupName  string    `json:"groupName"`  // 组名
	ItemType   int       `json:"itemType"`   // 类型 1:分组; 2:服务; 3:脚本
	CurrPath   string    `json:"currPath"`   // 路径
	Title      string    `json:"title"`      // 标题
	Desc       string    `json:"desc"`       // 描述
	WorkHome   string    `json:"workHome"`   // 工作目录(分组时添加)
	WorkPath   string    `json:"workPath"`   // 工作路径(服务时添加)
	CreateId   int64     `json:"createId"`   // 创建人ID
	CreateName string    `json:"createName"` // 创建人名称
	CreateTime time.Time `json:"createTime"` // 创建时间
}

func (s ScriptItemListResponse) MarshalJSON() ([]byte, error) {
	type temp ScriptItemListResponse
	return json.Marshal(&struct {
		temp
		CreateTime utils.DateTime `json:"createTime"`
	}{
		temp:       (temp)(s),
		CreateTime: utils.DateTime(s.CreateTime),
	})
}

// ServerScriptListResponse 服务脚本列表
type ServerScriptListResponse struct {
	Id          int64     `json:"id"`           // 主键
	GroupId     int64     `json:"group_id"`     // 组ID
	GroupName   string    `json:"group_name"`   // 组名
	ServerId    int64     `json:"server_id"`    // 服务ID
	ServerName  string    `json:"server_name"`  // 服务名称
	ItemType    int       `json:"item_type"`    // 类型 1:分组; 2:服务; 3:脚本
	CurrPath    string    `json:"curr_path"`    // 路径
	Title       string    `json:"title"`        // 标题
	Desc        string    `json:"desc"`         // 描述
	WorkHome    string    `json:"work_home"`    // 工作目录(分组时添加)
	WorkPath    string    `json:"work_path"`    // 工作路径(服务时添加)
	FileName    string    `json:"file_name"`    // 文件名称(脚本时添加)
	Content     string    `json:"content"`      // 内容
	ScriptType  int       `json:"script_type"`  // 脚本类型 0:脚本 1:命令
	ScriptParam string    `json:"script_param"` // 脚本参数
	LogFile     string    `json:"log_file"`     // 日志文件
	CreateId    int64     `json:"create_id"`    // 创建人ID
	CreateTime  time.Time `json:"create_time"`  // 创建时间
}

func (s ServerScriptListResponse) MarshalJSON() ([]byte, error) {
	type temp ServerScriptListResponse
	return json.Marshal(&struct {
		temp
		Key        string         `json:"key"`
		CreateTime utils.DateTime `json:"create_time"`
	}{
		temp:       (temp)(s),
		CreateTime: utils.DateTime(s.CreateTime),
		Key:        s.CurrPath + "-" + strconv.FormatInt(s.Id, 10),
	})
}
